/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.reportes.nuevos;

import com.camachosanchez.reportes.bean.GastosReencauche;
import com.camachosanchez.reportes.bean.GastosReencaucheDetalle;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Desktop;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Rolando
 */
public class NuevoReporteReencauche {
    
    public void generarReporte(GastosReencauche gastos) {
        try {
            Document document = new Document(PageSize.A4, 10, 10, 10, 10);
            SimpleDateFormat formatterName = new SimpleDateFormat("ddMMyyyy");
            String nombrePdf = "reportes/reencauches" + formatterName.format(new Date()) + ".pdf";
            PdfWriter.getInstance(document, new FileOutputStream(nombrePdf));
            document.open();
            document.add(ReporteUtil.getCabeceraReporte("Reencauches", "Gasto mensual en reencauches", "Periodo: " + gastos.getFechaDesde() + " - " + gastos.getFechaHasta()));
            document.add(new Paragraph("\n"));
            PdfPTable tablaDetalles = new PdfPTable(7);
            tablaDetalles.setWidthPercentage(100f);
            List<GastosReencaucheDetalle> detalles = gastos.getDetalles();
            for (GastosReencaucheDetalle dt : detalles) {
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("ENVÍO:", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(dt.getFechaEnvio(), 6, null, Element.ALIGN_LEFT));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("DISTRIBUIDOR:", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(dt.getDistribuidor(), 6, null, Element.ALIGN_LEFT));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("NUMERO DE GUÍA:", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(dt.getGuiaRemision(), 6, null, Element.ALIGN_LEFT));
                //tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 7, null, Element.ALIGN_LEFT, 0));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("FACTURA", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("RECEPCIÓN", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("CÓDIGO", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("MARCA", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("NUEVA BANDA", 1, Constantes.COLOR_CABECERA_TABLA));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("PRECIO", 1, Constantes.COLOR_CABECERA_TABLA, Element.ALIGN_RIGHT));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("GARANTÍA", 1, Constantes.COLOR_CABECERA_TABLA, Element.ALIGN_CENTER));
                List<String[]> neumaticos = dt.getDetalles();
                for (String[] n : neumaticos) {
                    if (n.length == 7) {
                        BaseColor colorFila = null;
                        if (n[1] == null || n[1].isEmpty()) {
                            colorFila = new BaseColor(255, 80, 80);
                        }
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(n[0], 1, colorFila, Element.ALIGN_LEFT));
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(n[1], 1, colorFila, Element.ALIGN_LEFT));
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(n[2], 1, colorFila, Element.ALIGN_LEFT));
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(n[3], 1, colorFila, Element.ALIGN_LEFT));
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(n[4], 1, colorFila, Element.ALIGN_LEFT));
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(GUIUtil.formatearNumero(n[5]), 1, colorFila, Element.ALIGN_RIGHT));
                        tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(n[6], 1, colorFila, Element.ALIGN_CENTER));
                    }
                }
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 4, null, 0, 0));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla("SUBTOTAL:", 1, Constantes.COLOR_CABECERA_TABLA, Element.ALIGN_RIGHT));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(GUIUtil.formatearNumero(dt.getSubtotal()), 1, null, Element.ALIGN_RIGHT));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 1, null, Element.ALIGN_LEFT));
                tablaDetalles.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 7, null, Element.ALIGN_LEFT, 0));
                //document.add(tablaDetalles);
            }
            document.add(tablaDetalles);
            //--------------------------
            PdfPTable total = new PdfPTable(7);
            total.addCell(ReporteUtil.getCeldaCabeceraTabla("TOTAL:", 3, Constantes.COLOR_CABECERA_TABLA));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla(GUIUtil.formatearNumero(gastos.getTotal()), 1, null, Element.ALIGN_RIGHT));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 3, null, 0, 0));

            total.addCell(ReporteUtil.getCeldaCabeceraTabla("CANTIDAD DE NEUMÁTICOS ENVIADOS:", 3, Constantes.COLOR_CABECERA_TABLA));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla("" + gastos.getNeumaticosEnviados(), 1, null, Element.ALIGN_RIGHT));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 3, null, 0, 0));

            total.addCell(ReporteUtil.getCeldaCabeceraTabla("CANTIDAD DE NEUMÁTICOS RECIBOS:", 3, Constantes.COLOR_CABECERA_TABLA));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla("" + gastos.getNeumaticosRecibidos(), 1, null, Element.ALIGN_RIGHT));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 3, null, 0, 0));

            total.addCell(ReporteUtil.getCeldaCabeceraTabla("CANTIDAD DE NEUMÁTICOS NO RECIBIDOS:", 3, Constantes.COLOR_CABECERA_TABLA));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla("" + gastos.getNeumaticosNoRecibidos(), 1, new BaseColor(255, 80, 80), Element.ALIGN_RIGHT));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 3, null, 0, 0));

            total.addCell(ReporteUtil.getCeldaCabeceraTabla("CANTIDAD DE NEUMÁTICOS ENVIADO POR GARANTÍA:", 3, Constantes.COLOR_CABECERA_TABLA));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla("" + gastos.getNeumaticosEnviadosGarantia(), 1, null, Element.ALIGN_RIGHT));
            total.addCell(ReporteUtil.getCeldaCabeceraTabla(" ", 3, null, 0, 0));

            total.setHorizontalAlignment(Element.ALIGN_RIGHT);
            total.setWidthPercentage(100f);

            document.add(total);
            //--------------------------
            document.close();
            File pdfFile = new File(nombrePdf);
            if (Desktop.isDesktopSupported()) {
                Desktop.getDesktop().open(pdfFile);
            } else {
                JOptionPane.showMessageDialog(null, "No se puede abrir el reporte.", "Error al abrir el archivo", JOptionPane.ERROR_MESSAGE);
            }
        } catch (DocumentException ex) {
            ex.printStackTrace();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
